//
//  SinaOauthViewController.swift
//  WeiBo
//
//  Created by Apple on 15/12/31.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit
import SVProgressHUD
import AFNetworking

// 遵守协议
class SinaOauthViewController: UIViewController , UIWebViewDelegate{
    
    //
    let webView = UIWebView()
    
    override func loadView() {
        // 设置web页面为我的返回视图
        
        view = webView
        
        
        
        setupNav()
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 跳转页面的时候,一定要注意背景颜色的问题
        view.backgroundColor = UIColor.whiteColor()
        
        /*
        NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
        */
        
        // 1. 加载授权页面
        
        // 1.1 创建一个 url
        let url = NSURL(string: "https://api.weibo.com/oauth2/authorize?client_id=1336041668&redirect_uri=http://www.baidu.com")
        // 1.2 创建一个 请求 -- 这个url可以强制解包,因为这个url是写死的
        let request = NSURLRequest(URL: url!)
        // 1.3 加载
        webView.loadRequest(request)
        
        
        // 2. 设置代理,然后拿到 url
        webView.delegate = self
    }
    
    //MARK:-- 设置页面的导航
    private func setupNav(){
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", style: UIBarButtonItemStyle.Plain, target: self, action: "dismiss")
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: UIBarButtonItemStyle.Plain, target: self, action: "autofill")
        
    }
    
    //MARK:-- nav按钮的实现方法
    func dismiss(){
        
        dismissViewControllerAnimated(true) { () -> Void in
            
        }
        
    }
    
    func autofill(){
        
        // 1 js -- \是转义字符
        let js = "document.getElementById('userId').value = \"13825444560\";document.getElementById('passwd').value = \"liuch132\""
        // 2 让web页面加载 js,
        webView.stringByEvaluatingJavaScriptFromString(js)
    }
    
    //MARK:-- 获取网络请求,来 获取 Token
    private func loadData(code:String){
        
        // 1 创建一个实例
        let afn = AFHTTPSessionManager()
        
        // 1.1 增加解析类型 -- 有一个 插入方法
        afn.responseSerializer.acceptableContentTypes?.insert("text/plain")
       
        let params = [ "client_id": app_Key,
            "client_secret":app_Secret,
            "grant_type":"authorization_code",
            "code":code,
            "redirect_uri":redirect_Url
        ]
        
        // 3 发送数据请求
        afn.POST("https://api.weibo.com/oauth2/access_token", parameters: params, success: { (_ , JSON) -> Void in
            
          
            
            printLog(JSON)
            
            printLog("呵呵 拿到token~~~~~")
            
            NSNotificationCenter.defaultCenter().postNotificationName(kNotificationEnter, object: self)
            
            }) { (_ , error) -> Void in
                printLog(error)
        }
        
    }
    
}

extension SinaOauthViewController{
    //MARK:--web页面的代理方法
    func webViewDidStartLoad(webView: UIWebView) {
        //显示我们的加载页面
        SVProgressHUD.show()
    }
    
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
        // 消失加载页面
    }
    
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
        SVProgressHUD.dismiss()
    }
    
    // 一进行网络请求,就得问一问他
    // 返回 true ,让web加载
    // 返回false,就是进行拦截
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        //        printLog(request.URL?.absoluteString)
        
        // URL? 是可选项,有可能为空,如果为空,absoluteString 肯定没有值,所以需要进行 if let判断
        if let url = request.URL?.absoluteString {
            
            
            // String 有一个方法,是判断前缀
            if url.hasPrefix(redirect_Url){
                
                //                printLog(url)
                //http://www.baidu.com/?code=aa04ee0e4198eb07eff8bb3a44ae8f7d
                
                if let code = request.URL?.query {
                    
                    //code=265e7253fa84cb5db96add6d83c85794
                    //                    printLog(code)
                    
                    let subStr = code.substringFromIndex("code=".endIndex)
                    // e40510dfed3976a518ceb0b34165eff2
                    printLog(subStr)
                    
//                    loadData(subStr)
                    
                    // 调用getToken方法，进行数据归档
                   SinaAccountViewModel.shareInstance.getToken(subStr, success: { () -> () in
                    
                    printLog("成功了,,,,,,,,是真的啦")
                    
                    // 当授权认证成功之后,发布一个通知,来实现页面跳转
                    NSNotificationCenter.defaultCenter().postNotificationName(kNotificationEnter, object: self)
                    }, failure: { (error) -> () in
                        
                        printLog(error)
                        
                   })
                    
                    
                }
                //  这里对返回链接进行了拦截，当拿到想要的数据后，拦截网站www.baidu.comsp/
                return false
                
            }
        }
        
        return true
    }
    
}




